/**
 * @param {number[]} nums
 * @return {number}
 */
 var findUnsortedSubarray = function(nums){
    let n=nums.length;
    let left=new Array(n),right=new Array(n);
    left[0]=0;
    right[n-1]=n;
    let up=Array.of(0),down=Array.of(n-1);
    for(let i=1;i<n;i++){
        while(up.length!=0&&nums[i]>=nums[up[up.length-1]]){
            up.pop();
        }
        if(up.length==0){
            left[i]=-1;
        }
        else{
            left[i]=up[up.length-1];
        }
        up.push(i);
        while(down.length!=0&&nums[n-i-1]<=nums[down[down.length-1]]){
            down.pop();
        }
        if(down.length==0){
            right[n-i-1]=n;
        }
        else{
            right[n-i-1]=down[down.length-1];
        }
        down.push(n-i-1);
    }
    let i=0;
    while(right[i]===n){
        i++;
    }
    let j=n-1;
    while(left[j]===-1){
        j--;
    }
    return Math.max(j-i+1,0);
};

// 执行用时：
// 104 ms
// , 在所有 JavaScript 提交中击败了
// 76.84%
// 的用户
// 内存消耗：
// 42.1 MB
// , 在所有 JavaScript 提交中击败了
// 34.21%
// 的用户